如何编写有效的接口测试?
阿里妹导读:在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则?测试代码的结构应该是什么样的?接口测试有哪些实践技巧?本文分享作者在接口测试上的实践总结。
自动化:接口测试是非交互式的自动化执行,不需要人参与。
独立性:接口测试之间不应该相互依赖。
可重复:接口测试可重复执行,不受环境影响。
接口测试遵守BCDE原则,保障接口交付质量。
Border:边界测试。
Correct:正确的输入,正确的预期输出。
Design:按照需求和设计文档编写测试逻辑。
Error:错误输入,预期输出。
数据准备:数据准备通过系统服务进行,不能通过直接插入db方式。
可测性:对于不可测的代码需要进行重构成合理的结构。
覆盖性:接口测试需要覆盖所有UC,同时代码覆盖率和分支覆盖率应达到一定标准,新增代码必须被覆盖。
持续性:如果代码修改导致已有接口测试执行失败,必须修复代码问题或者测试代码逻辑。
时间要求:接口测试应该在项目发布之前完成,不应放到项目发布之后补充。
外围系统调用由我们系统提供的服务。
系统执行了一堆代码逻辑,其中包含有分支逻辑。
系统执行过程中依赖外部HSF服务,进行了调用,并得到了返回值。
系统执行过程中依赖DB查询或者落地了数据,依赖缓存查询或者落地了数据。
系统执行过程中对外发送了消息。
给上游系统返回HSF执行结果。
入口覆盖:接口测试用例必须覆盖HSF服务入口、消息入口、定时任务入口。
依赖mock:在基本原则中,有可重复这个原则,即接口测试不能受环境依赖,需要mock掉对外依赖。但对于db依赖,不建议完全mock掉,一方面mock成本高,另外可能覆盖不到sql和表约束逻辑。
校验完整:有效的接口测试,应该具备完整的校验,没有校验的接口测试是没有意义的。只要执行过程中,留下的痕迹对业务有影响,都要进行完整校验,方能保障接口测试的有效性。
HSF接口返回值校验:按照场景和接口约定进行HSF返回参数校验。
DB校验:校验落地数据的正确性。
缓存校验:校验存入缓存中数据的正确性。
HSF依赖入参校验:通过mock工具获得依赖HSF调用的入参,进行入参校验。
消息校验:通过mock工具获得发送的消息对象,进行消息体校验。
配置数据:可以通过定义配置文件来初始化配置。
业务数据:这类数据,禁止通过直接插入数据方式产生,而是应通过调用业务服务产生。
返回参数校验:校验接口的返回参数。
DB:校验DB落地数据。
缓存数据校验:校验落地到缓存中的数据。
消息校验:校验对外发送的消息对象。
对外HSF调用校验:校验对外HSF调用的入参。
对于接口测试,执行效率是不得不关注的一个点,若一个接口测试执行3分钟以上才能看到结果,会大大降低开发同学编写接口测试的热情。对于测试执行效率提高,建议的方案为:
最小化启动测试上下文,例如spring boot的应用,启动spring就可以了
使用内存数据库,例如h2
将中间件依赖mock掉